﻿Imports Biz
Imports DAL


''' <summary>
''' Clase de gestión de lógica de negocio para la entidad Departamento
''' </summary>
''' <remarks></remarks>
Public Class GestorDepartamento

    Private Shared _instance As GestorDepartamento
    Private Shared m_semaforo As New Object

    Private _DALDepartamento As DALDepartamento

    ''' <summary>
    ''' Obtiene un objeto Departamento.
    ''' </summary>
    ''' <param name="oDepartamento">Objeto Departamento con la propiedad Dep_Codigo seteada
    ''' con el valor del Departamento a buscar.</param>
    ''' <returns>Objeto cDepartamento con datos obtenidos desde la base de datos.</returns>
    ''' <remarks></remarks>
    Public Function Buscar(ByVal oDepartamento As cDepartamento) As cDepartamento

        Return _DALDepartamento.Sel(oDepartamento)

    End Function

    ''' <summary>
    ''' Realiza una llamada a la capa de acceso a datos DAL para consultar la lista de Departamentos
    ''' </summary>
    ''' <returns>Colección de objetos de tipo cDepartamento</returns>
    ''' <remarks></remarks>
    Public Function Consultar() As Collection

        Return _DALDepartamento.SelectAll

    End Function

    ''' <summary>
    ''' Realiza una llamada a la capa de acceso a datos DAL para insertar un nuevo Departamento
    ''' </summary>
    ''' <param name="oDepartamento">Objeto de tipo cDepartamento con los datos para el nuevo registro</param>
    ''' <returns>Valor booleano que indica el resultado de la operación</returns>
    ''' <remarks></remarks>
    Public Function Ingresar(ByVal oDepartamento As cDepartamento) As Boolean
        Return _DALDepartamento.Insert(oDepartamento)
    End Function

    ''' <summary>
    ''' Realiza una llamada a la capa de acceso a datos DAL para eliminar un Departamento
    ''' </summary>
    ''' <param name="oDepartamento">Objeto de tipo cDepartamento con la identificación del registro a eliminar</param>
    ''' <returns>Valor booleano que indica el resultado de la operación</returns>
    ''' <remarks></remarks>
    Public Function Eliminar(ByVal oDepartamento As cDepartamento) As Boolean
        Return _DALDepartamento.Delete(oDepartamento)
    End Function

    ''' <summary>
    ''' Realiza una llamada a la capa de acceso a datos DAL para actualizar un Departamento
    ''' </summary>
    ''' <param name="oDepartamento">Objeto de tipo cDepartamento con la identificación del objeto a buscar</param>
    ''' <returns>Valor booleano que indica el resultado de la operación</returns>
    ''' <remarks></remarks>
    Public Function Editar(ByVal oDepartamento As cDepartamento) As Boolean
        Return _DALDepartamento.Update(oDepartamento)
    End Function

    ''' <summary>
    ''' Método estático Instance para exponer una única instancia de la clase GestsorDepartamento
    ''' </summary>
    ''' <returns>Unica instancia de la clase GestsorDepartamento</returns>
    ''' <remarks></remarks>
    Public Shared Function Instance() As GestorDepartamento
        If _instance Is Nothing Then
            SyncLock (m_semaforo)
                If _instance Is Nothing Then
                    _instance = New GestorDepartamento
                End If
            End SyncLock
        End If

        Return _instance
    End Function

    Private Sub New()
        _DALDepartamento = DALDepartamento.Instance
    End Sub

End Class
